/*
 * Copyright (C) 2009 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <jni.h>
#include <android/log.h>

#define NELEM(x) ((int) (sizeof(x) / sizeof((x)[0])))
#define JNIREG_CLASS "com/example/testjni/Decoder"

//com.example.testjni
static jint sendIr(JNIEnv *env, jclass cls, jint frequency, jintArray pattern) {
	jsize len = env->GetArrayLength(pattern);
	int* patternArray = env->GetIntArrayElements(pattern, NULL);

	__android_log_print(ANDROID_LOG_INFO, "TRUSS", "frequency=%d\n", frequency);

	int newPatternArrayLen = len + 1;
	int newPatternArray[newPatternArrayLen];
	newPatternArray[0] = frequency;
	int i = 0;
	for (; i < len; i++) {
		newPatternArray[i + 1] = patternArray[i];
	}
	int* newPatternArrayPtr = newPatternArray;
	// print
	i = 0;
	for (; i < newPatternArrayLen; i++) {
		__android_log_print(ANDROID_LOG_INFO, "TRUSS",
				"newPatternArrayPtr[%d]=%d\n", i, newPatternArrayPtr[i]);
	}

	env->ReleaseIntArrayElements(pattern, patternArray, JNI_ABORT);
	return 1;
}
static jint sendIrStatic(JNIEnv *env, jclass cls, jint frequency, jintArray pattern) {
	return 8888;
}
static JNINativeMethod method_table[] = {
		{ "sendIr", "(I[I)I", (void*) sendIr },
		{ "sendIrStatic", "(I[I)I",
				(void*) sendIrStatic }, }; //空是V [I 是数组

static int registerNativeMethods(JNIEnv* env, const char* className,
		JNINativeMethod* gMethods, int numMethods) {
	jclass clazz;
	clazz = env->FindClass(className);
	if (clazz == NULL) {
		return JNI_FALSE;
	}
	if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) {
		return JNI_FALSE;
	}

	return JNI_TRUE;
}

int register_ndk_load(JNIEnv *env) {
	return registerNativeMethods(env, JNIREG_CLASS, method_table,
			NELEM(method_table));
}

jint JNI_OnLoad(JavaVM* vm, void* reserved) {
	JNIEnv* env = NULL;
	jint result = -1;

	if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
		return result;
	}
	//result=register_ndk_load(env);

	if (register_ndk_load(env) < 0) {
		goto bail;
	}
	result = JNI_VERSION_1_4;

	bail: return result;
}

